home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8206 / 8206.xpi / content / rss / rss.js < prev    next >
Text File  |  2010-02-02  |  4KB  |  162 lines

  1. WiseStampRSSFeed.prototype = new Object();
  2. WiseStampRSSFeed.prototype.fetch = WiseStampRSSFeed_fetch;
  3. WiseStampRSSFeed.prototype.parse = WiseStampRSSFeed_parse;
  4. WiseStampRSSFeed.prototype.parseAtom = WiseStampRSSFeed_parseAtom;
  5. WiseStampRSSFeed.prototype.parseAtomItem = WiseStampRSSFeed_parseAtomItem;
  6. WiseStampRSSFeed.prototype.parseRSS2 = WiseStampRSSFeed_parseRSS2;
  7. WiseStampRSSFeed.prototype.parseRSS2Item = WiseStampRSSFeed_parseRSS2Item;
  8.  
  9. function WiseStampRSSFeed(url)
  10. {
  11.     this.url = url;
  12. }
  13.  
  14. function WiseStampRSSFeed_fetch(callback, failure)
  15. {
  16.     WiseStampUtils.log("rss.js :: WiseStampRSSFeed_fetch >>>>>");
  17.     var feed = this;
  18.  
  19.     var request = WiseStampCreateXMLHttpRequest();
  20.     request.onsuccess = function ()
  21.     {
  22.         WiseStampUtils.log("rss.js :: WiseStampRSSFeed_fetch :: onSuccess");
  23.         //dump("Success:"); dump(this.url); dump("\n");
  24.         if (!request.responseXML)
  25.         {
  26.             WiseStampUtils.log("rss.js :: WiseStampRSSFeed_fetch :: error - no responseXML");
  27.             callback(new WiseStampRSSData());
  28.             return;
  29.         };
  30.  
  31.         callback(feed.parse(request.responseXML));
  32.     };
  33.  
  34.     request.onfailure = function ()
  35.     {
  36.         WiseStampUtils.log("rss.js :: WiseStampRSSFeed_fetch :: onFailure");
  37.         //dump("Failure:"); dump(this.url); dump("\n");
  38.         callback(new WiseStampRSSData());
  39.     };
  40.  
  41.     request.open('GET', this.url, 1);
  42.     request.send('');
  43. }
  44.  
  45. function WiseStampRSSFeed_parse(xml)
  46. {
  47.     WiseStampUtils.log("rss.js :: WiseStampRSSFeed_parse >>>>>");
  48.  
  49.     // RSS x.xx
  50.     var rss = xml.getElementsByTagName('rss')[0];
  51.  
  52.     if (rss)
  53.     {
  54.         var version = rss.getAttribute('version');
  55.         switch (parseFloat(version))
  56.         {
  57.         case 2:
  58.             return this.parseRSS2(rss);
  59.         };
  60.  
  61.         return this.parseRSS2(rss);
  62.     };
  63.  
  64.     // RSS 1.00
  65.     var root = xml.documentElement;
  66.     if (root && root.tagName == "rdf:RDF" && root.getAttribute("xmlns") == "http://purl.org/rss/1.0/")
  67.     {
  68.         return this.parseRSS2(root);
  69.     };
  70.  
  71.     // ATOM
  72.     var feed = xml.getElementsByTagName('feed')[0];
  73.     if (feed)
  74.     {
  75.         return this.parseAtom(feed);
  76.     };
  77.  
  78.     return new WiseStampRSSData();
  79. }
  80.  
  81. function WiseStampRSSFeed_parseAtom(rss)
  82. {
  83.     var data = new WiseStampRSSData();
  84.  
  85.     var itemNodes = rss.getElementsByTagName('entry');
  86.     for (var i = 0; i < itemNodes.length; i++)
  87.     {
  88.         var itemNode = itemNodes[i];
  89.         data.addItem(this.parseAtomItem(itemNode));
  90.     };
  91.  
  92.     return data;
  93. }
  94.  
  95. function WiseStampRSSFeed_parseAtomItem(itemNode)
  96. {
  97.     var item = new WiseStampRSSDataItem();
  98.  
  99.     for (var i = 0; i < itemNode.childNodes.length; i++)
  100.     {
  101.         var childNode = itemNode.childNodes[i];
  102.         switch (childNode.tagName)
  103.         {
  104.         case "title":
  105.             item.setTitle(childNode.textContent);
  106.             break;
  107.         case "link":
  108.             if (childNode.getAttribute("rel") == "alternate")
  109.             {
  110.                 item.setLink(childNode.getAttribute("href"));
  111.             };
  112.             break;
  113.         case "published":
  114.             item.setPubDate(Date.parse(childNode.textContent));
  115.             break;
  116.         };
  117.     };
  118.  
  119.     return item;
  120. }
  121.  
  122. function WiseStampRSSFeed_parseRSS2(rss)
  123. {
  124.     WiseStampUtils.log("rss.js :: WiseStampRSSFeed_parseRSS2 >>>>>");
  125.     
  126.     var data = new WiseStampRSSData();
  127.  
  128.     var itemNodes = rss.getElementsByTagName('item');
  129.     for (var i = 0; i < itemNodes.length; i++)
  130.     {
  131.         var itemNode = itemNodes[i];
  132.         data.addItem(this.parseRSS2Item(itemNode));
  133.     };
  134.  
  135.     return data;
  136. }
  137.  
  138. function WiseStampRSSFeed_parseRSS2Item(itemNode)
  139. {
  140.     WiseStampUtils.log("rss.js :: WiseStampRSSFeed_parseRSS2Item >>>>>");
  141.     
  142.     var item = new WiseStampRSSDataItem();
  143.  
  144.     for (var i = 0; i < itemNode.childNodes.length; i++)
  145.     {
  146.         var childNode = itemNode.childNodes[i];
  147.         switch (childNode.tagName)
  148.         {
  149.         case "title":
  150.             item.setTitle(childNode.textContent);
  151.             break;
  152.         case "link":
  153.             item.setLink(childNode.textContent);
  154.             break;
  155.         case "pubDate":
  156.             item.setPubDate(Date.parse(childNode.textContent));
  157.             break;
  158.         };
  159.     };
  160.  
  161.     return item;
  162. }